"""
面相对象四大特征
    封装：
        就是把对象的属性和方法(或者服务)结合为一个独立的整体，
        并尽可能隐藏对象的内部实现细节。封装是一种信息隐藏技术
    继承:
       继承允许我们定义一个类（子类/派生类）来继承另一个类（父类/基类）的属性和方法。
    多态:
        指的是同一操作(函数)作用于不同的对象，可以有不同的解释，产生不同的执行结果。
    抽象：
        从对象中提取相同的属性和行为的方式

类和对象的定义
    类：是对一类具有相同属性和行为的事务的抽象
    对象：对象是一切存在的实体
类和对象的关系：
    类是对象的模板，对象是类的实例

如何定义一个类
    class 类名:

类中包含
    属性（特征）： 名词
    方法（行为）： 动词
"""

class Student:
    # 属性
    def __init__(self,name,age,gender,address,money):
        self.name = name # 属性叫做类的成员变量
        self.age = age
        self.gender = gender
        self.address = address
        self.__money = money

    # 方法
    # 方法是类的成员函数，接收的第一个参数是self,表示对象本身(对象的地址)
    # 外部访问时需要在对象后面加上.方法名来访问
    def ply(self):
        print(f'我叫{self.name},我喜欢玩游戏')




if __name__ == '__main__':
    """
        使用Student类创建了两个对象 s 和 s2
        s 和 s2 中都会有 name age, gender,address属性 和ply方法
        其中这些变量都是公共变量，可以被外部访问，如果是__这种私有的变量，只能在内部冯文
    """

    s = Student('聂茹凤',19,'女','北京市海淀区',3000)
    print(s.name)
    #print(s.__money) # 私有属性不允许外部访问
    s.ply()

    s2 = Student('刘千琪',21,'女','北京市丰台区',5000)
    print(s2.age)
    s2.ply()
